package tech.aistar.controller;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import tech.aistar.pojo.Result;
import tech.aistar.pojo.User;
import tech.aistar.service.UserService;

/**
 * 本来用来演示:
 * 用户控制层
 * @author success
 * @date 2024/6/24 09:32:15
 */
@RestController //返回的结果都是转成json格式
@RequestMapping("user")
public class UserController {
    //控制层调用service层
    @Autowired
    private UserService userService;

    @Autowired
    private JavaMailSender javaMailSender;

    /**
     * 发送验证码到邮箱
     * 如何接受参数:
     * 只要保证url中的key的名称和控制层方法的参数的名称
     * 高度保持一致即可
     * @return
     */
    @GetMapping("sendCode")
    public Result sendCode(String email, HttpServletRequest request){
        //1. 判断email是否是存在的
        User user = userService.getUserByEmail(email);
        if(user==null){
            //邮箱是不存在的
            return new Result("404","email不存在!");
        }

        //说明邮箱是存在的 - 发送验证码
        //1. 定义一个对象,用来封装邮箱的信息
        SimpleMailMessage msg = new SimpleMailMessage();

        //信息如下:
        //发送方
        //TODO... 发送方的邮箱必须要yml文件中配置的username保持一致
        msg.setFrom("849962874@qq.com");
        //标题
        msg.setSubject("商丘学院实训验证码");
        //随机验证码[100000,999999]之间的随机整数
        int n = (int) (Math.random()*900000+1000000);
        //将int类型转换成String类型
        String code = String.valueOf(n);
        msg.setText(code);

        //将code保存到session作用域
        HttpSession session = request.getSession();
        //session作用域的生命周期是一次会话期间
        //浏览器打开 - 浏览器关闭
        //保存数据的格式也是key,value的格式
        session.setAttribute(email,code);

        //TODO... email是从页面传入进来的
        //接收方
        msg.setTo(email);

        //发送
        javaMailSender.send(msg);

        return new Result("200","发送验证码成功!");
    }

    /**
     * 登录的后台
     * 发送的是post请求,发送的数据的格式是json格式
     * 保证方法的参数的名称和json格式中的key的名称高度保持一致
     * @param code
     * @param email
     * @return
     */
    @PostMapping("login")
    public Result login(String code,String email,HttpServletRequest request){
        //1. 校验邮箱是否存在
        User user = userService.getUserByEmail(email);
        if(user == null){
            return new Result("404","email不存在!");
        }
        //邮箱是ok的
        //获取session对象
        HttpSession session = request.getSession();
        //根据key获取value
        String emailCode = (String) session.getAttribute(email);
        //当前输入的code和邮箱中的code进行比较
        //字符串的比较建议使用equals方法
        if(code.equals(emailCode)){
            return new Result("200","登录成功",user);
        }
        return new Result("500","验证码输入错误!");
    }
}

